object Extractor {
  def unapply(a: Any): Option[Product2[Int, String]] = Some(new P2(1, "2"))
}
class P2[A, B](val _1: A, val _2: B) extends Product2[A, B] {
  def canEqual(other: Any) = true
  def isP2 = true
}

object Test {
  def main(args: Array[String]): Unit = {
    "" match {
      case Extractor(p) =>
        val pp: Product2[Int, String] = p
      case x => throw new MatchError(x)
    }
    "" match {
      case Extractor(x, y) =>
        val xx: Int = x
        val yy: String = y
      case x => throw new MatchError(x)
    }
  }
}
